I love the smell of UnrealEd crashing in the morning. – tarquin
Legacy:UnrealScript For Visual Basic Programmers
Contents
Introduction[edit]
If you've ever programmed in Wikipedia:Visual Basic, you already know a lot of the basic concepts of coding (no pun intended). UnrealScript is a pretty full-fledged object-oriented language though, while Visual Basic's OOP support is more or less limited to the notion of having pre-defined objects (for instance, user interface elements) with some properties and methods. You can create and use your own classes in Visual Basic (in form of "class modules"), but the average Visual Basic programmer hardly ever will feel the need to do so.
A good read for getting into the notion of Object-Oriented Programming (OOP) is Object Oriented Programming Overview.
Familiar Concepts[edit]
Variables[edit]
In UnrealScript, all variables need to be predeclared using either var
(for class-level variables) or local
(for function-level variables). Variables declared on class level are globally accessible in that class. See UnrealScript Language Reference/Variables for details.
There's no "Variant" type in UnrealScript for variables that can hold any sort of data; variables are strongly typed, and you have to typecast them in most cases if you want to assign the value of a variable of one type to a variable of a different type.
Structured Programming[edit]
UnrealScript provides very similar means for structured programming (conditionals, loops) as Visual Basic. The following table lists corresponding idioms; see UnrealScript Language Reference/Program Structure for details of their syntax.
Statements in UnrealScript always end with a semicolon (;
), not (like in Visual Basic) with an end-of-line. You can therefore continue a statement in the next physical line just by not ending it with a semicolon; there's no need of an explicit line-continuation character like Visual Basic's underscore (_
).
User-defined Data Types[edit] |
||
VB6 and below: | ||
Type Name Var1 As DataType1 Var2 As DataType1 Var3 As DataType2 End Type |
struct Name { var DataType1 Var1; var DataType1 Var2; var DataType2 Var3; }; |
struct Name { var DataType1 Var1, Var2; var DataType2 Var3; }; |
VB7 and above: | ||
Structure Name Var1 As DataType1 Var2 As DataType1 Var3 As DataType2 End Structure |
struct Name { var DataType1 Var1; var DataType1 Var2; var DataType2 Var3; }; |
struct Name { var DataType1 Var1, Var2; var DataType2 Var3; }; |
Comments[edit] |
||
Rem Comment ' Comment |
/* Multi-Line Comment */ // Comment |
|
Conditionals[edit] |
||
If condition Then ElseIf condition Then Else End If |
if (condition) { } else if (condition) { } else { } |
|
Select Case expression Case value1 DoSomething Case value2, value3 DoSomethingElse Case Else DoDefaultSomething End Select |
switch (expression) { case value1: DoSomething(); break; case value2: case value3: DoSomethingElse(); break; default: DoDefaultSomething(); } |
|
Loops[edit] |
||
For var = start To end Next |
for (var = start; var <= end; var++) { } |
|
For var = 1 To number_of_times Next |
for (var = 0; var < number_of_times; var++) { } |
|
For var = start To end Step step Next |
for (var = start; var <= end; var += step) { } |
|
Do If condition Then Exit Do Loop |
for (;;) { if (condition) break; } |
|
Do While condition Loop |
while (condition) { } |
|
Do Loop Until condition |
do { } until (condition); |
You can make your UScript more readable with the continue keyword. With it, it makes easier (thus, a good practice) to go to the next loop item if a certain condition is not met.
Subs and Functions[edit] |
|
Sub subname (param1 As Integer, param2 As String) If condition Then Exit Sub End Sub |
function subname (int param1, string param2) { if (condition) return; } |
Function funcname (...) As Double If condition Then funcname = value : Exit Function funcname = value End Function |
function float funcname (...) { if (condition) return value; return value; } |
Arrays[edit]
Arrays in UScript are easy, there is just 1 major thing to remember. Arrays start at 0! always. No wierd:
Dim SomeArray(2042 to 35930) AS Integer
just a simple:
var int SomeArray[420];
There are also Dynamic Arrays (they also ALWAYS start at 0).
Event-Driven Architecture[edit]
Everything in UnrealScript is driven by engine events, very similar to Visual Basic. The Actor class declares a variety of events that are inherited by Actor subclasses and called by the engine for every object of those classes. Sometimes you can even control how and when events are called; the Timer event, for instance, is controlled by the SetTimer function.
To have objects of your class do something, implement some or all of its events. You can, of course, also call functions from code executed for other objects, including objects of different classes. The functions of the Mutator class, for example, are actually called by other UnrealScript code.